/*
 * TacticaAlvaro.java
 *
 * Created on 25 de marzo de 2007, 19:31
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007.Alvaro_Win;

import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.awt.Point;
import java.util.Vector;
/**
 *
 * @author aaalvaarrooo
 */
public class TacticaAlvaro implements Tactica{
    
    /** Creates a new instance of TacticaAlvaro */
        public TacticaAlvaro() {
    }
    
        private int nValores[][]={
        {-150,0,5},  // Jugador 1   PORTERO[0]
        {-80,-45,3},  // Jugador 2  CENTRAL IZQUIERDO[1]
        {-100,0,3},  // Jugador 3   LIBERO [2]
        {-80,45,3},  // Jugador 4    CENTRAL DERECHO 4[3]
        {-50,0,10},  // Jugador 5    PIVOTE[4]
        {0,-55,3},  // Jugador 6   INTERIOR IZQUIERDO[5]
        {0,55,3},  // Jugador 7    INTERIOR DERECHO[6]
        {80,-60,7},  // Jugador 8  DELANTERO IZQ[7]
        {80,60,7},  // Jugador 9  DELANTERO DCHA [8]
        {65,0,7},  // Jugador 10     MEDIA PUNTA[9]
        {100,15,6} // Jugador 11   DELANTERO CENTRO[10]
    };
    public String getNombre() {
        return "F.C Alvaro_Win" ;
    }
    
    public Color getColor1() { 
        return Color.DARK_GRAY;
    }
    
    public Color getColor2() {
        return new Color(242,110,125);
        
    }
    public Color getColorNumero() {
        return Color.RED;
    }
    
        public int getFuerza(int n){
        return nValores[n][2];
    }
    public int getXInicial(int n){
        return nValores[n][0];
    }
    
    public int getYInicial(int n){
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj){
        Vector<Comando> comandos=new Vector();
          Point bola=sj.getBola();
          int nJug=sj.getMasCercanoDeBola();
        for (int n=0;n<11;n++){
              if (sj.getMasCercanoDeBola()!=n){
                  comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
              }
        }
            
       Point misJugadores[]=sj.getMisJugadores();
       Point contrarios[]=sj.getContrario();
      
         
          double pos_y_bola=bola.getY();
          if (pos_y_bola<-20) {
              pos_y_bola=-20;
          }
          if (pos_y_bola>20) {
              pos_y_bola=20;
          }
          
          comandos.add(new ComandoIrA(0,-150,pos_y_bola));
       
/* ----------DEFENSA-------------- */
      
          if (bola.getX() < 10)
          {
            for (int n=5;n<9 && n!=nJug;n++)
            comandos.add(new ComandoIrA (n,(nValores[n][0])-60, nValores[n][1]));
           
        } 
          
     if(bola.getX() < -60 && bola.getY() >-70 && bola.getY() <70)
     {
            
            int contrario1=sj.getContrarioMasCerca(1);
            int contrario2=sj.getContrarioMasCerca(3);
            if (contrario1!=contrario2 && sj.getMasCercanoDeBola()!=1 && sj.getMasCercanoDeBola()!=3){
                comandos.add(new ComandoIrA (1,contrarios[contrario1].getX()+10,contrarios[contrario1].getY()));
                comandos.add(new ComandoIrA (3,contrarios[contrario2].getX()+10,contrarios[contrario2].getY()));
            }
            if (contrario1==contrario2)
            {
                if (contrarios[contrario1].getY()>=0) {
                 comandos.add(new ComandoIrA (3,contrarios[contrario1].getX()+10,contrarios[contrario1].getY()));
                     }
                else    {     
                    comandos.add(new ComandoIrA (1,contrarios[contrario1].getX()+10,contrarios[contrario1].getY()));
                        }
           
             } 
       }
          
          
/*------------------ATAKE----------------*/
  
       if(bola.getX() >= 10) {
            
            for (int n=1;n<5 && n!=nJug;n++){
                comandos.add(new ComandoIrA (n,(nValores[n][0])+40, nValores[n][1])) ;  
            }
                   }
          
       if(bola.getX() >= 85)
       {
              comandos.add(new ComandoIrA (1,15,-70)) ;
              comandos.add(new ComandoIrA (2,0,0)) ;
              comandos.add(new ComandoIrA (3,15,70)) ;
              comandos.add(new ComandoIrA (4,45,0)) ;
              comandos.add(new ComandoIrA (5,55,-55)) ;
              comandos.add(new ComandoIrA (6,55,55)); 
             
              for (int j=7;j<11;j++){
                 if (nJug!=j) {
                     int contrario4=sj.getContrarioMasCerca(j);
                     if ((( contrarios[contrario4].getX() )-( misJugadores[j].getX() )<10) && ( ( contrarios[contrario4].getX() )-( misJugadores[j].getX() )>=0)){
                       comandos.add(new ComandoIrA (j, (contrarios[contrario4].getX())+5, misJugadores[j].getY() ));  
                     }
                 }
             }
          
          int contrario3=sj.getContrarioMasCerca(4);
          comandos.add(new ComandoIrA (4,contrarios[contrario3].getX()+5, nValores[4][1])) ;
          
       
       }  
          /*--------------------------GENERAL----------------------*/
         comandos.add(new ComandoIrA(nJug, bola.getX() , bola.getY()));
          
         if (nJug==0 || nJug==2){
             if (bola.getY()>=0){
              comandos.add(new ComandoIrA(6, -100 , 85));
              comandos.add(new ComandoPase(nJug,6));
             }
              else {
              comandos.add(new ComandoIrA(5, -100 , -85));
              comandos.add(new ComandoPase(nJug,5));
              }
                 
             }
    
         
         if (nJug==1){
              if (((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())>15) ||((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())>15)){
                 comandos.add(new ComandoPase(nJug,4));
             }
             else{
             comandos.add(new ComandoIrA(5, -100 , -85));
              comandos.add(new ComandoPase(nJug,5));
         }
            }
             
         if (nJug==3){
             if (((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())>15) ||((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())>15)){
                 comandos.add(new ComandoPase(nJug,4));
             }
             else{
             comandos.add(new ComandoIrA(6, -100 , 85));
              comandos.add(new ComandoPase(nJug,6));
         }
         }
           
         if (nJug==5) {
             if (((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())>15) ||((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())>15)){
                 comandos.add(new ComandoPase(nJug,4));
             }
             else{
             comandos.add(new ComandoPase(nJug,7));
         }
         }
         
         if (nJug==6 ){
             if (((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())>15) ||((contrarios[sj.getContrarioMasCerca(4)].getX())-(misJugadores[4].getX())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())<-15) ||((contrarios[sj.getContrarioMasCerca(4)].getY())-(misJugadores[4].getY())>15)){
                 comandos.add(new ComandoPase(nJug,4));
             }
             else{
              comandos.add(new ComandoPase(nJug,8));
          }
         }
          else {
          
          int contrario5=sj.getContrarioMasCerca(159,0);
          if (contrarios[contrario5].getY()>5) {
             comandos.add(new ComandoTiroAPuerta(nJug,-15)); 
          }
          if (contrarios[contrario5].getY()<-5) {
           comandos.add(new ComandoTiroAPuerta(nJug,15)); 
          }
          else{
               if (misJugadores[nJug].getY()>0) {
               comandos.add(new ComandoTiroAPuerta(nJug,15));
                }
               else {
                 comandos.add(new ComandoTiroAPuerta(nJug,-15));
               }
                   
               }
              
          }
         
         return comandos;
            }

    }